package damas;

import java.io.*; 
import java.util.Vector;


//import ANTLRStringStream;


import antlr.*; 

public class Procesador implements Runnable{ 
	
	private static String mensajes;
	
	private static String funciones[][] = new String[100][5];
	
	public static int numeroFunciones = 0;
	

	/**
	 * Constructor vacio
	 */
	public Procesador(){
		
	}
	
	/**
	 * Constructor parametrizado
	 * 
	 * @param ruta
	 */
	public Procesador(String ruta){
		mensajes = new String("");
		numeroFunciones = 0;
		
		//INICIALIZACION DE LA MATRIZ DE FUNCIONES Y PARAMETROS
		for(int i = 0; i < 100; i++){
			for(int j = 0; j < 5; j++){				
				if (j == 0){
					funciones[i][j] = "0";					
				}
				else{
					funciones[i][j] ="";
				}				
			}
		}
		
		
		try{ 			

			FileInputStream fis = new FileInputStream(ruta); 
			Analex analex = new Analex(fis); 
			Anasin anasint = new Anasin(analex); 
			anasint.programa();  
		}catch(ANTLRException ae){ 
			System.err.println(ae.getMessage()); 
		}      catch (FileNotFoundException fnfe){ 
			println(0,"No se encontro el fichero"); 
		}
	}
	
	
	/**
	 * Anade una orden a la lista de funciones que se ejecutaran para manejar el tablero.
	 * 
	 * @param id
	 * @param p1
	 * @param p2
	 * @param p3
	 */
	public static void anadirFuncion(String id, String p1, String p2, String p3, String p4){
		
		funciones[numeroFunciones][0] = id;
		funciones[numeroFunciones][1] = p1;
		funciones[numeroFunciones][2] = p2;
		funciones[numeroFunciones][3] = p3;
		funciones[numeroFunciones][4] = p4;
		
		numeroFunciones++;
		
	}
	
	
	/**
	 * Devuelve la matriz que es una lista de ordenes con sus respectivos parametros.
	 * Esta funcion sera llamada en la clase principal. Cuya funcion que devuelve
	 * sera decodificada para llamar al metodo corespondiente.
	 * 
	 * @return String[][]
	 */
	public String[][] devolverFunciones(){
		return funciones;
		
	}
	
	
	
	/**
	 * Muestra por consola el mensaje correspondiente proveniente del analizador
	 * sintactico, y lo añade a la lista de mensajes.
	 * 
	 * @param dgbtype
	 * @param str
	 * 
	 */
	/**
	 * @param dbgtype
	 * @param str
	 */
	public static void println(int dbgtype,String str) {
				
		// Mensaje de error
		if(dbgtype == 0)
			System.err.println(str);
		// Mensaje normal
		if(dbgtype == 1)
			System.out.println(str);
		
		// Añadir al mensaje a la lista
		anadirMensajeCompilacion(str);
	}

	/**
	 * Añade un mensaje a la lista de mensajes que despues seran usados por 
	 * la clase notificacion.
	 * 
	 * @param msj
	 */
	public static void anadirMensajeCompilacion(String msj){
		mensajes += msj + " \n";
		
	}
	
	/**
	 * Funcion que devuelve un string de mensajes.
	 * 
	 * @return String
	 */
	public String devolverMensajesCompilacion(){
		
		return mensajes;
	}
	
	@Override
	public void run() {
		//  Auto-generated method stub
		//mensajes += "hola \n que \n tal \n estas\n";
		
		try {
			mensajes += "\n FINALIZANDO PROCESADOR";
			this.finalize();
		} catch (Throwable e) {
			//  Auto-generated catch block
			e.printStackTrace();
			
			mensajes += "\n Error al finalizar EL PROCESADOR";
		}
	}


	public static void main(String args[]){ 
		try{ 

			FileInputStream fis= new FileInputStream("./src/damas/entrada.txt"); 
			Analex analex = new Analex(fis); 
			Anasin anasint = new Anasin(analex); 
			anasint.programa();  
		}catch(ANTLRException ae){ 
			System.err.println(ae.getMessage()); 
		}      catch (FileNotFoundException fnfe){ 
			System.err.println("No se encontro el fichero"); 
		}    
	} 
}